//package com.example.demo.config.springsecurity;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.http.HttpMethod;
//import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
//import org.springframework.security.web.authentication.rememberme.InMemoryTokenRepositoryImpl;
//
//// 启用spring security
//@Configuration
//public class SecurityConfig extends WebSecurityConfigurerAdapter {
//
//    @Autowired
//    UserDetailsService userDetailsService;
//
//    @Override
//    protected void configure(HttpSecurity http) throws Exception {
//        http.authorizeRequests()// //首先需要配置哪些请求会被拦截，哪些请求必须具有什么角色才能访问
//                // 静态资源，可匿名访问
//                .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
//                .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
//                .antMatchers("/login", "/auth").permitAll() // //使用permitAll来运行任何人访问（注意一定要放在前面）
//                .anyRequest().hasAnyRole("user", "admin")// user角色才可以访问（不包含上面的静态资源）
//                .and()
//                .formLogin() // 配置Form表单登陆 默认登录地址/login，默认登出地址/logout
//                .and()
//                //为每个已经登陆的浏览器分配一个携带Token的Cookie，并且此Cookie默认会被保留14天，只要我们不清理浏览器的Cookie，那么下次携带此Cookie访问服务器将无需登陆
//                .rememberMe()//开启记住我功能
//                .rememberMeParameter("remember")//登陆请求表单中需要携带的参数，如果携带，那么本次登陆会被记住
//                //TokenRepository有很多种实现，InMemoryTokenRepositoryImpl直接基于Map实现的，缺点就是占内存、服务器重启后记住我功能将失效
//                .tokenRepository(new InMemoryTokenRepositoryImpl()) //这里使用的是直接在内存中保存的TokenRepository实现
//
//        ;
//    }
//
//    @Override
//    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//        auth.userDetailsService(userDetailsService) //使用自定义的Service实现类进行验证
//                .passwordEncoder(new BCryptPasswordEncoder()); // 数据库保存的密码是加密后的
//    }
//}
